package com.tanhua.server.controller;

import com.tanhua.domain.db.Settings;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.server.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("users")
@Slf4j
public class UserInfoController {

    @Autowired
    private UserService userService;

    /**
     * 接口名称：用户资料 - 读取
     * 接口路径：GET/users
     * 需求描述：
     *   1.根据用户id查询用户详情
     *   2.如果userID不为NULL，根据用户id查询
     *   3.如果用户id为空，huanxinID不为NULL，根据环信ID查询
     *   4.如果userID与huanxinID都为空，从token获取用户id
     */
    @GetMapping
    public ResponseEntity<Object> findUserInfById(Long userID,Long huanxinID) {
        return userService.findUserInfById(userID,huanxinID);
    }

    /**
     * 接口名称：用户资料 - 保存
     * 接口路径：PUT/users
     */
    @PutMapping
    public ResponseEntity<Object> updateUserInfo(
            @RequestBody UserInfo userInfo) {
        return userService.updateUserInfo(userInfo);
    }

    /**
     * 接口名称：用户通用设置 - 读取
     * 接口路径：GET/users/settings
     */
    @GetMapping("settings")
    public ResponseEntity<Object> querySettings() {
        return userService.querySettings();
    }

    /**
     * 接口名称：通知设置 - 保存
     * 接口路径：POST/users/notifications/setting
     */
    @PostMapping("notifications/setting")
    public ResponseEntity<Object> saveNotifications(@RequestBody Settings settings) {
        return userService.saveNotifications(settings);
    }

    /**
     * 接口名称：设置陌生人问题
     * 接口路径：POST/users/questions
     */
    @PostMapping("questions")
    public ResponseEntity<Object> saveQuestions(@RequestBody Map<String, String> map) {
        // 获取请求数据
        String content = map.get("content");
        return userService.saveQuestions(content);
    }

    /**
     * 接口名称：黑名单 - 翻页列表
     * 接口路径：GET/users/blacklist
     *
     * @RequestParam
     * 1、当请求参数与方法形参名称不一致，可以通过此注解建立关系
     * 2、也可以指定默认值
     */
    @GetMapping("blacklist")
    public ResponseEntity<Object> blacklist(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pagesize) {
        log.info("接口名称：黑名单 - 翻页列表");
        return userService.blacklist(page, pagesize);
    }

    /**
     * 接口名称：黑名单 - 移除
     * 接口路径：DELETE/users/blacklist/:uid
     * @PathVariable
     * 1、在restful请求中，用来建立方法形参与url中路径参数的对应关系
     * 2、@PathVariable("uid")中的uid,对应{uid}中uid
     */
    @DeleteMapping("blacklist/{uid}")
    public ResponseEntity<Object> deleteBlackUser(@PathVariable("uid") Long blackUserId){
        return userService.deleteBlackUser(blackUserId);
    }

    /**
     * 接口名称：互相喜欢，喜欢，粉丝 - 统计
     * 接口路径：GET/users/counts
     */
    @GetMapping("counts")
    public ResponseEntity<Object> queryCounts(){
        return userService.queryCounts();
    }

    /**
     * 接口名称：互相喜欢、喜欢、粉丝、谁看过我 - 翻页列表
     * 接口路径：GET/users/friends/:type
     */
    @GetMapping("friends/{type}")
    public ResponseEntity<Object> queryUserLikeList(
            @PathVariable("type")Integer type,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pagesize) {
        return userService.queryUserLikeList(type,page,pagesize);
    }

    /**
     * 接口名称：粉丝 - 喜欢
     * 接口路径：POST/users/fans/:uid
     */
    @PostMapping("/fans/{uid}")
    public ResponseEntity<Object> fansLike(@PathVariable("uid") Long likeUserId){
        return userService.fansLike(likeUserId);
    }


    /**
     * 接口名称：是否喜欢（新增接口）
     * 接口路径：GET/users/:uid/alreadyLove
     */
    @GetMapping("{uid}/alreadyLove")
    public ResponseEntity<Object> alreadyLove(@PathVariable("uid") Long uid){
        return ResponseEntity.ok(true);
    }

    /**
     * 接口名称：修改手机号- 1 发送短信验证码
     * 接口路径：POST/users/phone/sendVerificationCode
     */
    @PostMapping("/phone/sendVerificationCode")
    public ResponseEntity<Object> sendVerificationCode(){
        return userService.sendVerificationCode();
    }
    /**
     * 接口名称：修改手机号 - 2 校验验证码
     * 接口路径：POST/users/phone/checkVerificationCode
     */
    @PostMapping("/phone/checkVerificationCode")
    public ResponseEntity<Object> checkVerificationCode(@RequestBody Map<String,String> param){
        String verificationCode = param.get("verificationCode");
        return userService.checkVerificationCode(verificationCode);
    }
    /**
     * 接口名称：修改手机号 - 3 保存
     * 接口路径：POST/users/phone
     */
    @PostMapping("/phone")
    public ResponseEntity<Object> upadatePhone(@RequestBody Map<String,String> param){
        String phone = param.get("phone");
        return userService.upadatePhone(phone);
    }
}